<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Import XML Sitra</title>
</head>
<body>
<?php
//
// Script d'import de fichiers XML Sitra dans une base MySQL
// Version : 0.1
// Auteur : Thomas Collet
// Date : 20/11/2008
// PHP 4.4.8
// MySQL 6.0.4alpha
// Testé sur plateforme Windows donc path d'accès aux fichiers plus compliqués que sur Unix
//

// On définit le chemin d'accès aux fichiers XML Sitra
$path_to_xml_sitra_files = 'C:\www\lab.rhonetourisme\sitra\import-sitra-php4-loadxmlinfile\xml';

// On définit le chemin d'accès aux images sur le serveur Sitra
$path_to_images_sitra_files = 'ftp://FtpUserMultimedia:Sitra!FTP#@212.23.170.172/multimedia/imagesObtprincipales/';

// On définit le fichier XML Sitra simplifié temporaire
$tmp_simplified_sitra_file = $path_to_xml_sitra_files . '\tmp_simplified_sitra_file.xml';

// On définit le fichier XML Sitra simplifié temporaire pour MySQL 
$tmp_simplified_sitra_file_for_mysql = 'C:\\\\www\\\lab.rhonetourisme\\\sitra\\\import-sitra-php4-loadxmlinfile\\\xml\\\\tmp_simplified_sitra_file.xml';

// On définit le fichier XSL servant à simplifier le XML Sitra
$xsl_file = 'C:\www\lab.rhonetourisme\sitra\import-sitra-php4-loadxmlinfile\xslt\sitraxmlsimplifier.xsl';

function simplifyXmlSitraFile($xml,$xsl,$simplified_xml){
	
	// Fail if XSLT extension is not available
	if(!function_exists('xslt_create')) {
		echo('Activer xslt_create');
		return FALSE;
	}

	// look for xsl
	if(!is_readable($xsl)) {
		echo('Problème xsl : impossible d\'ouvrir le fichier '.$xsl);
		return false;
	}
	
	// look for xsl
	if(!is_readable($xml)) {
		echo('Problème xml : impossible d\'ouvrir le fichier '.$xml);
		return false;
	}
	
	$arguments = array (
		'/_xml' => file_get_contents($xml),
		'/_xsl' => file_get_contents($xsl)
	);

	// create an XSLT processor
	$xh = xslt_create();

	// set error handler
	xslt_set_error_handler($xh, array (&$this, 'xslt_error_handler'));

	// process the schema
	$result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments);

	xslt_free ($xh);

	if(is_string($simplified_xml) AND ($fp = fopen($simplified_xml, 'w'))) {
		$motif='`<[a-zA-Z0-9_]*//*>`i';
		$result=preg_replace($motif, '', $result);
		fwrite($fp, '');
		fwrite($fp, $result);
		fclose($fp);
		fread(fopen($simplified_xml,'r'),filesize($simplified_xml));
		echo('<br />');
		return true;
	}
	else{
		echo('Problème à l\'écriture du fichier XML simplifié. Vérifier le chemin d\'accès du fichier tmp_simplified_sitra_file.xml');
		return false;
	}

}

function xmlParser($xml_file) {
	// Récupération du contenu du fichier XML
	$open_file = fopen($xml_file, 'r');
	$data = '';
	while ($r=fread($open_file,filesize($xml_file)) ) {
	$xml_file_data .= $r;
	}
	// Parser le XML
	$parser = xml_parser_create();
	xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
	xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
	xml_parse_into_struct($parser,$xml_file_data,$values,$tags);
	xml_parser_free($parser);
	return $values;
}

// On se connecte à MySQL
$db = mysql_connect('localhost', 'root', '');
// On sélectionne la base
mysql_select_db('sitra',$db); 

// On liste les fichiers XML Sitra à importer et on les place dans un tableau
if ($handle = opendir($path_to_xml_sitra_files)) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != ".." && $file != ".svn") {
			$xml_sitra_files[]=$file;
        }
    }
    closedir($handle);
}

// On boucle sur chaque fichier XML Sitra
foreach($xml_sitra_files as $xml_sitra_file){
	$xml_file = $path_to_xml_sitra_files . '\\' . $xml_sitra_file;
	// On simplifie le fichier XML Sitra	
	simplifyXmlSitraFile($xml_file, $xsl_file, $tmp_simplified_sitra_file);

	// On importe tout ça dans la BDD
	//mysql_query("LOAD XML INFILE '" . $tmp_simplified_sitra_file_for_mysql . "' INTO TABLE objets ROWS identified by '<sitra_object>'") or die("Erreur MySQL : ".mysql_error());

	/* 
	 * Code listant les OBT Sitra importés et récupérant les images principales
	 * Ne fonctionne que sous PHP5
	 * 
	 * /
	// Liste des objets importés
	$xml2 = new domDocument();
	$xml2 -> load($tmp_simplified_sitra_file);
	echo '<strong>' .$xml2 -> getElementsByTagName('titre')->item(0)->nodeValue . ' [' . $xml2 -> getElementsByTagName('identifiant_sitra')->item(0)->nodeValue . ']</strong> importé<br />';
	
	// Récupération des images principales
	$visuel_principal_url = $xml2 -> getElementsByTagName('visuel_principal')->item(0)->nodeValue;
	if ($visuel_principal_url){
		$visuel_principal_file_name = array_reverse(explode('/',$visuel_principal_url));
		$visuel_principal_file_name = $visuel_principal_file_name[0];
		copy($path_to_images_sitra_files . $visuel_principal_file_name,'images/' . $visuel_principal_file_name);
		echo 'avec son image principale ' . $visuel_principal_file_name . '<br />';
	}
	*/


	$simplified_xml = xmlParser($tmp_simplified_sitra_file);
	foreach ($simplified_xml as $val) {
	/*print_r($val);
	echo('<br />');
	*/
		if($val['tag']=='titre') {
			$titre = $val['value'];
		}
		if($val['tag']=='identifiant_sitra') {
			$identifiant_sitra = $val['value'];
		}
		if($val['tag']=='visuel_principal') {
			$visuel_principal = $val['value'];
		}
	}
	
	echo '<strong>' . $titre . ' [' . $identifiant_sitra . ']</strong> importé<br />';
	
	// Récupération des images principales
	if($visuel_principal) {
		$visuel_principal_file_name = array_reverse(explode('/',$visuel_principal));
		$visuel_principal_file_name = $visuel_principal_file_name[0];
		copy($path_to_images_sitra_files . $visuel_principal_file_name,'images/' . $visuel_principal_file_name);
		echo 'avec son image principale ' . $visuel_principal_file_name . '<br />';
		echo('<br />');
	}
	unset($titre, $identifiant_sitra, $visuel_principal);
	
}


// On supprime le fichier temporaire
unlink($tmp_simplified_sitra_file);

// On ferme la connexion à mysql
mysql_close(); 

?>
</body>
</html>